package com.ruoyi.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.domain.Article;
import com.ruoyi.domain.RecoverStation;
import com.ruoyi.domain.vo.ArticleColumnVo;
import com.ruoyi.domain.vo.ArticleOriginDateVo;
import com.ruoyi.domain.vo.DeptArticleCountVo;

/**
 * artilceService接口
 *
 * @author ruoyi
 * @date 2025-01-16
 */
public interface ArticleService extends IService<Article>
{


    /**
     * 日期区间查询对应分局的不同栏目文章数量
     * 根据当前登录用户所属的分局来统计该分局在某个时间段内发布的文章对应的不同栏目数量
     */
    public List<ArticleColumnVo> selectArticleColumnListByDept(String deptName, String startTime, String endTime);

    /**
     * 日期区间查询对应部门及其子部门的不同栏目文章数量
     * 根据部门名称查询该部门及其所有子部门在某个时间段内发布的文章对应的不同栏目数量
     */
    public List<ArticleColumnVo> selectArticleColumnListByDeptAndSubDepts(String deptName, String startTime, String endTime);

    /**
     * 日期区间查询所有文章来源的不同栏目文章数量
     * 供admin用户使用，统计所有市局和分局的数据
     */
    public List<ArticleColumnVo> selectAllDeptArticleColumnList(String startTime, String endTime);

    /**
     * 日期区间查询对应用户的文章栏目数量
     * 原始方法保持不变，用于向后兼容
     */
    public List<ArticleColumnVo> selectArticleColumnList(String userName, String startTime, String endTime);


    /**
     * 日期区间查询
     */
    public List<ArticleOriginDateVo> selectArticleOriginDateList(String startTime, String endTime);

    /**
     * 按部门统计文章数量
     */
    public List<DeptArticleCountVo> selectDeptArticleCountList(String startTime, String endTime);


    /**
     * 批量更新artilce删除状态,逻辑删除
     */
    public List<RecoverStation> updateArticleDeletedStatus(Long[] articleIds);

    /**
     * 查询artilce列表(权限)
     */
    public List<Article> selectArticleListByRole(boolean isAdmin,Article article);

    /**
     * 查询artilce
     *
     * @param articleId artilce主键
     * @return artilce
     */
    public Article selectArticleByArticleId(Long articleId);

    /**
     * 查询artilce列表
     *
     * @param article artilce
     * @return artilce集合
     */
    public List<Article> selectArticleList(Article article);

    /**
     * 新增artilce
     *
     * @param article artilce
     * @return 结果
     */
    public int insertArticle(Article article,String articleName);

    /**
     * 修改artilce
     *
     * @param article artilce
     * @return 结果
     */
    public int updateArticle(Article article,String articleName);

    /**
     * 批量删除artilce
     *
     * @param articleIds 需要删除的artilce主键集合
     * @return 结果
     */
    public int deleteArticleByArticleIds(Long[] articleIds);

    /**
     * 删除artilce信息
     *
     * @param articleId artilce主键
     * @return 结果
     */
    public int deleteArticleByArticleId(Long articleId);

    /**
     * 根据auditId删除article
     *
     * @param auditId auditId
     * @return 结果
     */
    public int deleteArticleByAuditId(Long auditId);

    /**
     * 隐藏文章
     *
     * @param articleId 文章主键
     * @return 结果
     */
    public int hideArticle(Long articleId);

    /**
     * 显示文章
     *
     * @param articleId 文章主键
     * @return 结果
     */
    public int showArticle(Long articleId);

    /**
     * 批量隐藏文章
     *
     * @param articleIds 文章主键数组
     * @return 结果
     */
    public int batchHideArticle(Long[] articleIds);

    /**
     * 批量显示文章
     *
     * @param articleIds 文章主键数组
     * @return 结果
     */
    public int batchShowArticle(Long[] articleIds);
}
